package main

import "fmt"

// AInterface A接口继承了B C
type AInterface interface {
	methodA()
	BInterface
	CInterface
}

type BInterface interface {
	methodB()
}
type CInterface interface {
	methodC()
}

type Stu struct {
}

// 接口的继承 ，此时必须实现所有接口的实现
// interface默认是个指针，引用类型
// 没有方法的接口是空接口，任何类型都实现了空接口
func main() {

	var stu Stu
	var a AInterface = stu // 接口A 继承了 B C ，所以a可以调用接口A的方法、接口B的方法、接口C的方法
	a.methodA()
	a.methodB()
	a.methodC()
	var b BInterface = stu
	b.methodB()
	var c CInterface = stu
	c.methodC()

	//没有方法的接口是空接口，任何自定义都实现了空接口
	var t T = stu
	fmt.Println(t) //{}

	//空接口
	var t2 interface{} = stu
	var num float64 = 9
	t2 = num
	fmt.Println(t2) //9s

}

func (s Stu) methodA() {
	fmt.Println("stu methodA...")

}
func (s Stu) methodB() {
	fmt.Println("stu methodB...")

}

func (s Stu) methodC() {
	fmt.Println("stu methodC...")
}

type T interface {
}
